package com.example.java.utils;

import java.nio.file.Paths;
import java.util.Objects;

// 该类包含用于在操作对象或在操作之前检查某些条件的static实用程序方法
public class ObjectsMain {
    public static void main(String[] args) {
        String str1 = "Hello World";

        Objects.isNull(str1); // 检查指定的对象引用是否为null
        Objects.nonNull(str1); // 检查指定的对象引用是否不为null

        // 检查指定的对象引用不为null
        Objects.requireNonNull(str1);
        // 检查指定的对象引用不为null，如果为null则抛出自定义的NullPointerException
        Objects.requireNonNull(str1, "str1 cannot be null"); // 带有自定义错误消息的版本
        // 检查指定的对象引用不为null，如果为null则抛出自定义的NullPointerException，使用 supplier lambda 表达式
        Objects.requireNonNull(str1, () -> {
            System.out.println("str1 cannot be null");
            return "str1 cannot be null";
        }); // 带有自定义错误消息的版本，使用 supplier lambda 表达式
        // 如果第一个参数非null则返回第一个参数，否则返回第二个参数。
        String defaultValue = Objects.requireNonNullElse(str1, "default value");// 带有默认值版本
        System.out.println("default value is: " + defaultValue);
        // 如果第一个参数非null则返回第一个参数，否则返回supplier.get()的非null值。
        String defaultValue2 = Objects.requireNonNullElseGet(str1, () -> "default value"); // 带有默认值版本，使用 supplier lambda 表达式
        System.out.println("default value2 is: " + defaultValue2);

        System.out.println("hash code of str1 is: " + Objects.hashCode(str1)); // 获取对象的哈希码

        // 检查两个对象是否相等
        String str2 = "Hello";
        System.out.println(Objects.equals(str1, str2));


    }
}

// 关于 Objects 对象操作工具类的相关的使用参考官方文档 https://java.cunzaima.cn/jdk21/doc-zh/api/java.base/java/util/Objects.html
